#include <iostream>
#include <iomanip>
#include <string>
#include <cmath>
#include <vector>
#include <algorithm>

using namespace std;

typedef long long ll;
/*const ll M = 1000000007;

inline void solve(ll n, ll d, ll x, vector<ll>& res, vector<ll>& t){
	if (d == 1) {
		fill(res.begin(), res.begin() + min(n, x) + 1, 1);
		fill(res.begin() + min(n, x) + 1, res.end(), 0);
		return;
	}
	solve(n, d / 2, x, t, res);
	for (int i = 0; i <= n; ++i)
		for (int j = 0; j + i <= n; ++j)
			res[i + j] = t[i] * t[j] % M;

}

int main(){
	ll n, d, x;
	vector<ll> a(2001), b(2001);
	while (true){
		cin >> n >> d >> x;
		if (n == 0) break;

	}
	return 0;
}*/

int n;
double watercost;
vector<double> watereffects, fertcost, ferteffects, needed;

const double eps = 1e-9;

inline double f(double w) {
	double cost = watercost * w;
	for (int i = 0; i < n; i++) {
		double ost = needed[i] - watereffects[i] * w;
		if (ost > 0) {
			double fertneed = ost / ferteffects[i];
			double addcost = fertneed * fertcost[i];
			cost += addcost;
		}
	}

	return cost;
}

int main(){
	ios_base::sync_with_stdio(false);
	while (cin >> n && n) {
		cin >> watercost;
		watereffects.resize(n); fertcost.resize(n); ferteffects.resize(n); needed.resize(n);
		for (int i = 0; i < n; i++) {
			cin >> watereffects[i] >> fertcost[i] >> ferteffects[i] >> needed[i];
		}

		double l = 0, r = 1e4;
		while (abs(r - l) > eps) {
			double m1 = l + (r - l) / 3, m2 = r - (r - l) / 3;
			if (f(m1) > f(m2)) l = m1;
			else r = m2;
		}

		cout << fixed << setprecision(6) << f((l + r) / 2) << endl;
	}

	return 0;
}